/**
 * Galleria
 * 
 * Gestisce l'inserimento delle foto nelle cartelle
 * @class Galleria
 * @param divId
 * @returns
 */
function Galleria(divId) {
	/**
	 * @field
	 */
	var loader = $('<img src="images/ajax-loader.gif" alt="loader ajax" style="display:block;margin:0 auto;width:50px;box-shadow:none" />');
	/**
	 * Puntatore interno
	 * @field
	 */
	var that = this; //Workaround
	/**
	 * Foto
	 * @field
	 */
	var fotos = undefined;
	/**
	 * Gallery
	 * @field
	 */
	var galleries = undefined;
	/**
	 * div delle gallery
	 * @field
	 */
	var galleryDiv = $('#'+divId+' #gallery-galleria');
	/**
	 * oggetto jquery delle foto
	 * @field
	 */
	var fotosDiv = $('#'+divId+ ' #gallery-foto');
	/**
	 * Numero di richieste ajax in sospeso
	 * @field
	 */
	var requestPending = 0;
	/**
	 * @field
	 */
	var callsDone = 0;
	/**
	 * Aggiunge una foto nella gallery
	 * @param id
	 * @param galleryid
	 */
	this.addFoto = function(id,galleryid) {
		
		fotosDiv.empty()
		fotosDiv.append(loader.clone());
		
		requestPending++;
		
		var data = {
			u:'on',
			c:'CGallery',
			a:'aggiungiFoto',
			id:galleryid,
			foto:id
		};
		
		$.ajax({
			type:'POST',
			url:'index.php',
			data:data,
			success:that.addFotoHandler,
			error:that.errorHandler
		})
	}
	/**
	 * Gestisce la risposta  
	 * @param html
	 * @param textResponse
	 */
	this.addFotoHandler = function(html,textResponse){
		//TODO:Controllo!
		var tempNode = $(html);
		
		
		requestPending--;
		that.loadFotos();
		that.callDraw();
		
	}
	/**
	 * Ajax loader per le foto
	 */
	this.loadFotos = function() {
		
		requestPending++;
		
		fotosDiv.empty()
		fotosDiv.append(loader.clone());
		
		var data = {
			u:'on',
			c:'CFoto',
			a:'jsonFotoProprie'
		};
		
		$.ajax({
			type:'POST',
			url:'index.php',
			data:data,
			success:that.loadFotosHandler,
			error:that.loader
			
		});
		
	}
	/**
	 * Gestisce la risposta
	 * @param html
	 * @param response
	 */
	this.loadFotosHandler = function(html,response) {
		try{
			fotos = $.parseJSON(html)
		}catch(e){
			window.messaggioPopup.display('Si e&#039; verificato un errore!','Foto risposta non corretta');
			fotosDiv.text('Impossibile caricare le foto!');
		}
		
		if(window.console && window.debug){
			window.console.info('Caricando le foto...');
		}

		requestPending--;
	}
	/**
	 * Richiesta ajax per gli album
	 */
	var loadAlbums = function() {
		
		requestPending++;
		
		var data= {
				u:'on',
				c:'CGallery',
				a:'jsonGalleries'
			};
		
		
			$.ajax({
				type:'POST',
				url:'index.php',
				data:data,
				success:that.loadAlbumsHandler,
				error:that.loader
			});
			
	}
	/**
	 * Gestore richieste
	 * @param html
	 * @param response
	 */
	this.loadAlbumsHandler = function(html,response){
		try {
			galleries = $.parseJSON(html);
		} catch(e){
			window.messaggioPopup.display('Errore!','Impossibile caricare!');
		}
		if(window.console && window.debug){
			window.console.info('Caricando le gallery...');
		}
		
		requestPending--;
	}
	/**
	 * Loader
	 */
	this.loader = function() {
		loadAlbums();
		that.loadFotos();
		
		$(document).ready(function(){
		   that.callDraw();
		});
		
	}
	
	/**
	 * Se le richieste sono state completate inizia a disegnare le thumb
	 *  
	 */
	this.callDraw = function() {
		
		//Per evitare un loop infinito
		if(callsDone == 40){
			if(window.console && window.debug){
				window.console.info('Organizza foto:Esecuzione interrotta!');
			}
			
			window.messaggioPopup.display('Errore','Timeout raggiunto!',function(){
				window.ajax.doAjax('index.php');
			})
			
			return;
		}
		
		if(requestPending != 0){
			if(window.console && window.debug){
				window.console.info('Aspetto che le operazioni siano completate ...');
			}
			callsDone++;
			window.setTimeout(that.callDraw,100);
		}else{
			that.draw();
			callsDone = 0;
		}
	}

	/**
	 * Disegna le thumb
	 */
	this.draw = function() {
		
		//Reset
		fotosDiv.empty();
		galleryDiv.empty();
		
		var len_foto = fotos.length;
		var fotos_added = 0;
		
		for(var i = 0;i < len_foto;i++){
			
			var foto = fotos[i];
			
			if(foto.galleryid != 0 && foto.galleryid != null){
				fotos_added++;
				continue;
			}
			
			var fotodiv = $('<div class="foto" value="'+foto.id+'"></div>');
			fotodiv.append('<img src="upload/th/'+foto.nomefototh+'" alt="" />');
			fotosDiv.append(fotodiv);
		}
		
		if((len_foto-fotos_added) == 0){
			fotosDiv.append('<p>Nessuna foto presente / Tutte le tue foto sono posizionate nelle gallery!</p>');
		}
		
		
		$('.foto').draggable({
			revert:true,
			helper: 'clone',
			appendTo: fotosDiv,

			start:function(){
				$(this).addClass('invisible');
				
			},
			stop:function(){
				
				$(this).removeClass('invisible');
			}
		});
		
		var len_gallery = galleries.length;
		
		for(var i = 0;i < len_gallery;i++){
			
			var gallery = galleries[i];
			
			var div = $('<div class="gallery" value="'+gallery.id+'"></div>');
			div.append('<div class="img"></div>');
			div.append('<div class="gallery-title" ><span>'+gallery.nome+'</span></div>');
			div.click(function(){
				window.ajax.doAjax('index.php?c=CGallery&a=mostraGallery&id='+$(this).attr('value'));
			});
			galleryDiv.append(div);
			
		}
		
		if(len_gallery == 0){
			galleryDiv.append('<p style="margin:20px 0px 0px 30px;">Nessuna gallery presente!</p>');
		}
		
		$('.gallery').droppable({
			hoverClass:'dropping' ,
			drop:function(event,ui){
				var id = ui.draggable.attr('value');
				
				$('.ui-draggable-dragging').remove();
				
				var galleryid = $(this).attr('value');
				that.addFoto(id, galleryid);	
			}
		});
				
	}
	
	this.loader();
	
}
